Pendahuluan

Tugas UAS ini bertujuan untuk mengukur kemampuan dalam membuat visualisasi data yang informatif menggunakan R Markdown. Dataset yang digunakan berasal dari file Data.xlsx.

Struktur Folder

Proyek ini mengikuti struktur sebagai berikut:

project/
├── data/       
├── figures/  
├── docs/       
├── script/     
└── styles.css  

Persiapan Data

# Validasi file dan membaca dataset
setwd("C:/Users/ACER/OneDrive/Documents/UAZ DATAVIZ")
if (!file.exists("data.xlsx")) {
  stop("File data.xlsx tidak ditemukan. Pastikan file berada di direktori yang benar.")
}

data <- read_xlsx("data.xlsx")

required_columns <- c("Pendapatan_per_kapita", "Angka_Harapan_Hidup")
if (!all(required_columns %in% names(data))) {
  stop("Beberapa kolom yang diperlukan tidak ditemukan di dataset.")
}

Visualisasi Data

1. Grafik Univariat: Histogram

print(names(data))
## [1] "geo"                   "Negara"                "Benua"                
## [4] "Tahun"                 "Angka_Harapan_Hidup"   "Pendapatan_per_kapita"
## [7] "Populasi"              "Jumlah_anak"

a. Distribusi Angka Harapan Hidup

Grafik berikut menunjukkan distribusi angka harapan hidup dalam dataset. Histogram ini membantu kita memahami persebaran nilai, termasuk apakah data condong ke kanan, ke kiri, atau simetris.

# Histogram untuk variabel numerik
p1 <- ggplot(data, aes(x=Angka_Harapan_Hidup)) +  # Gunakan backticks jika ada spasi di nama kolom
  geom_histogram(binwidth = 5, fill = "skyblue", color = "black") +
  labs(title = "Distribusi Angka Harapan Hidup",
       x = "Angka_Harapan_Hidup",
       y = "Frekuensi") +
  theme_minimal()
if (!dir.exists("figures")) dir.create("figures")
ggsave("figures/scatterplot.png", p1)
## Saving 7 x 5 in image
print(p1)

b. Distribusi Pendapatan per Kapita

Grafik berikut menunjukkan distribusi pendapatan per kapita. Grafik ini penting untuk melihat pola umum, seperti adanya outlier atau pola tertentu pada data.

p2 <- ggplot(data, aes(x = Pendapatan_per_kapita)) +
  geom_histogram(binwidth = 2100, fill = "lightgreen", color = "black") +
  labs(title = "Distribusi Pendapatan per Kapita",
       x = "Pendapatan per Kapita",
       y = "Frekuensi") +
  theme_minimal()
ggsave("figures/histogram2.png", p2)
## Saving 7 x 5 in image
print(p2)

2. Grafik Bivariat: Scatter Plot

a. Hubungan antara Pendapatan per Kapita dan Angka Harapan Hidup

Scatter plot berikut menunjukkan hubungan antara pendapatan per kapita dan angka harapan hidup. Grafik ini membantu melihat apakah ada pola hubungan linear, seperti semakin tinggi pendapatan, semakin tinggi angka harapan hidup.

p2 <- ggplot(data, aes(x = Pendapatan_per_kapita, y = `Angka_Harapan_Hidup`)) +
  geom_point(color = "darkred", alpha = 0.7) +
  labs(title = "Hubungan antara Pendapatan per Kapita dan Angka Harapan Hidup",
       x = "Pendapatan_per_Kapita",
       y = "Angka_Harapan_Hidup") +
  theme_minimal()

ggsave("figures/scatterplot2.png", p2)
## Saving 7 x 5 in image
print(p2)

3. Grafik Multivariat: Bubble Plot

p3 <- ggplot(data, aes(x = Angka_Harapan_Hidup, 
                       y = `Pendapatan_per_kapita`, 
                       size = Populasi, color = Benua)) +
  geom_point(alpha = 0.7) +
  scale_size(range = c(2, 12)) +
  labs(title = "Hubungan Multivariat Antar Variabel",
       x = "Angka Harapan Hidup",
       y = "Pendapatan per Kapita",
       size = "Populasi",
       color = "Benua") +
  theme_minimal()

ggsave("figures/bubbleplot.png", p3)
## Saving 7 x 5 in image
print(p3)

4. Grafik Interaktif: Scatter Plot dengan Plotly

p4 <- plot_ly(data, x = ~Angka_Harapan_Hidup, 
              y = ~`Pendapatan_per_kapita`, 
              type = 'scatter', 
              mode = 'markers', 
              marker = list(size = 10, color = ~as.factor(Benua))) %>%
  layout(title = "Scatter Plot Interaktif",
         xaxis = list(title = "Angka Harapan Hidup"),
         yaxis = list(title = "Pendapatan per Kapita"))

htmlwidgets::saveWidget(as_widget(p4), "figures/plotly_scatter.html")
## Warning in dir.create(target_dir):
## 'plotly_scatter_files\htmltools-fill-0.5.8.1' already exists
## Warning in dir.create(target_dir): 'plotly_scatter_files\htmlwidgets-1.6.4'
## already exists
## Warning in dir.create(target_dir): 'plotly_scatter_files\plotly-binding-4.10.4'
## already exists
## Warning in dir.create(target_dir): 'plotly_scatter_files\typedarray-0.1'
## already exists
## Warning in dir.create(target_dir): 'plotly_scatter_files\jquery-3.5.1' already
## exists
## Warning in dir.create(target_dir): 'plotly_scatter_files\crosstalk-1.2.1'
## already exists
## Warning in dir.create(target_dir):
## 'plotly_scatter_files\plotly-htmlwidgets-css-2.11.1' already exists
## Warning in dir.create(target_dir): 'plotly_scatter_files\plotly-main-2.11.1'
## already exists
p4

5. Grafik Dinamis: Gapminder Animation

p5 <- ggplot(gapminder, aes(x = gdpPercap, 
                            y = lifeExp, 
                            size = pop, 
                            color = continent)) +
  geom_point(alpha = 0.7) +
  scale_x_log10() +
  labs(title = "Gapminder: Perubahan dari Tahun ke Tahun",
       subtitle = 'Tahun: {closest_state}',
       x = "Pendapatan per Kapita (log scale)",
       y = "Angka Harapan Hidup",
       size = "Populasi",
       color = "Benua") +
  theme_minimal() +
  transition_states(year, transition_length = 2, state_length = 1) +
  ease_aes('linear')

anim <- gganimate::animate(p5, nframes = 100, renderer = gifski_renderer())
gganimate::anim_save("figures/gapminder_animation.gif", animation = anim)